iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0
AI/ ML & Data

從點子構想到部署上線:機器學習專案的一生系列 第 17

[Day 17] Netflix 影片處理三部曲—— Part 2. 偵測影片內容中的場景變化

  • 分享至 

  • xImage
  •  

對影片處理而言,有一個非常關鍵的步驟,稱為 shot segmentation。將一長串的影片分割成 scene 和shot,如下圖所示。

Scene vs. Shot

  • Scene:是表現情節的基本單位,每一個 scene 可能都在講述不同的劇情或故事,一個 scene 中會有很多個 shots
  • Shot:同一個 scene 中的不同畫面,可能是不同人物之間的切轉

https://ithelp.ithome.com.tw/upload/images/20240929/20152325Ec5hLwI7AP.png
圖片來源:Stranger Things

為了之後的模型訓練或是其他應用,Netflix 需要先將影片切割成 shot。除了人為剪輯以外,他們當然也希望能夠訓練模型,自動偵測影片內容中的場景變化,有助於他們前處理影片。


Scene boundary detection

Netflix 想要偵測 scenes 之間的轉換的任務被稱為 scene boundary detection,他們主要使用兩種方法來偵測影音內容中的場景變化:

  1. 利用劇本資訊:有點類似 weak supervision 的概念,用劇本資訊切分畫面
  2. Multimodal sequential model:直接訓練一個 multimodal sequential model,直接用 shot-level embeddings 去預測場景變化

讓我們來一一介紹吧!

1. 利用劇本資訊

第一個方法的概念很直觀,利用劇本的資訊來分割影片。劇本就如同電影或節目的設計圖,以特定格式編寫,每個場景都會以場景標題為開頭,顯示拍攝地點和時間等資訊。這種統一的格式有助於 Netflix 將劇本解析成結構化格式,再按照這份資料切分畫面。

不過,這個方法並非想像中容易,因為劇本是事前編寫的,無法反映出拍攝過程中即興做出的變動,或是後期製作和剪輯的結果,劇本不會因為這些變動而被改寫。

為了處理這種有雜訊而不一致的資料來源,Netflix 需要先將「帶有時間戳記的文字」(如字幕和口語說明)與「劇本文字」(對白和動作描述)相互對齊。這個對齊的過程有兩個主要挑戰:

  1. 即時變更:由於拍攝過程中的即興演出,可能導致語義相似但不完全相同的文字變動
  2. 後期製作調整:後期編修影片時,可能會造成更顯著變動,例如重新排序畫面、刪除或插入整個場景,導致劇本和最終影片版本存在差異。

為了應對這些挑戰,Netflix 分別使用以下方法:

  1. 為了處理即興的文字變動,他們使用 pre-trained 的 sentence-level embeddings 來表示兩個來源中的文字,以找到相似語意的對白。

  2. 第二個問題的解決辦法是使用 dynamic time warping (DTW),這是一種用於測量兩個在時間或速度上有所不同的序列的相似性方法。

Netflix 會使用 DTW 將劇本文字(對白和動作描述)與帶有時間戳記的文字(如字幕和口語描述)進行比對,藉此,絕大多數的重要事件都能夠很好地被對齊。並且,因為這些劇本文字是帶有時間戳記的,可以用來表現影片中可能的場景邊界。

結果如下圖所示,他們可以根據劇本文字找到相對應的影片片段,成功地分割影片:


圖片來源:[1]


2. Multimodal sequential model

雖然上述的方法已經可以達到 Netflix 想要的成果,但是他們並非總是能夠得到高品質的劇本資訊。因此,他們決定訓練一個序列模型,直接預測每個場景轉換的時間點。

Netflix 使用的模型架構相對簡單——就是一個雙向的 GRU(biGRU),會輸入一個 shot embedding,預測此 shot 是否為 scene 的結尾。

這個架構的價值不在於使用的模型本身,而是他們想要訓練的資料不容易取得(有被標記過的場景變化資料)。另外,如果要在大規模的資料上訓練這種 shot embeddings 也不容易。因此,他們決定使用一些已經 pre-trained 好的 embedding models。

  • Video embeddings:Netflix 利用已經訓練好的內部模型,該模型已經在對齊的影片片段和文字(即前面提到的「帶有時間戳記的文字」)上經過 pre-trained。
  • Audio embeddings:Netflix 首先進行 source seperation(他們使用 Spleeter 這個工具),將前景(語音)與背景(音樂、音效、雜訊)分離,再使用 wav2vec2 分別萃取出每個被分離的波形的 embeddings,最後將結果串聯起來。

接著,他們要將 video embeddings 和 audio embeddings 結合起來,他們嘗試兩種方法:

  • Early fusion:在輸入到 biGRU 之前,先將 video embeddings 和 audio embeddings 串聯起來,再輸入到單個 biGRU 中。
  • Late fusion:每個 embeddings 都先用自身的 biGRU 進行編碼,在輸出層之前再將兩個 hidden states 串聯起來。

結果

最後來看看結果吧!他們跟現有的 SOTA 相比,跟目前的 baseline 結果相當,甚至超越。另外,他們發現新增 audio embeddings 可以將結果提升 10-15%。最後,他們發現 late fusion 的結果也會比 early fusion 還要進步 3-7%。


以上就是今天的內容啦!Netflix 使用兩種方法來偵測場景邊界,這些方法利用了各種可用的模態——劇本、音訊和影片,也得到非常優秀的效果,能夠自動偵測影片內容中的場景變化,有助於他們進行影片的前處理。


謝謝讀到最後的你,如果喜歡這系列,別忘了按下喜歡和訂閱,才不會錯過最新更新。
如果有任何問題想跟我聊聊,或是想看我分享的其他內容,也歡迎到我的 Instagram(@data.scientist.min) 逛逛!
我們明天見!


Reference
[1] https://netflixtechblog.com/detecting-scene-changes-in-audiovisual-content-77a61d3eaad6
[2] https://en.wikipedia.org/wiki/Dynamic_time_warping


上一篇
[Day 16] Netflix 影片處理三部曲—— Part 1. 使用 contrastive learning 建立 in-video search 平台
下一篇
[Day 18] Netflix 影片處理三部曲—— Part 3. 標記音訊中的音樂和語音
系列文
從點子構想到部署上線:機器學習專案的一生30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言